package com.baomidou.kisso.common.bcprov.asn1;

import java.io.IOException;

public class BERTaggedObjectParser implements ASN1TaggedObjectParser {

	private boolean _constructed;

	private int _tagNumber;

	private ASN1StreamParser _parser;


	BERTaggedObjectParser( boolean constructed, int tagNumber, ASN1StreamParser parser ) {
		_constructed = constructed;
		_tagNumber = tagNumber;
		_parser = parser;
	}


	public boolean isConstructed() {
		return _constructed;
	}


	public int getTagNo() {
		return _tagNumber;
	}


	public ASN1Encodable getObjectParser( int tag, boolean isExplicit ) throws IOException {
		if ( isExplicit ) {
			if ( !_constructed ) {
				throw new IOException("Explicit tags must be constructed (see X.690 8.14.2)");
			}
			return _parser.readObject();
		}

		return _parser.readImplicit(_constructed, tag);
	}


	public ASN1Primitive getLoadedObject() throws IOException {
		return _parser.readTaggedObject(_constructed, _tagNumber);
	}


	public ASN1Primitive toASN1Primitive() {
		try {
			return this.getLoadedObject();
		} catch ( IOException e ) {
			throw new ASN1ParsingException(e.getMessage());
		}
	}
}
